home *** CD-ROM | disk | FTP | other *** search
/ TPUG - Toronto PET Users Group / TPUG Users Group CD / TPUG Users Group CD.iso / AMIGA / AMICUS / AMIBEST4.ADF / AmigaBasicStuff / HuePalette (.txt) < prev    next >
AmigaBASIC Source Code  |  1987-07-22  |  3KB  |  149 lines

  1. '
  2. ' HSI to RGB Conversion Tool
  3. ' By Stephen R. Pietrowicz
  4. '
  5. SCREEN 1,640,200,4,2
  6. WINDOW 2,"HSI to RGB Conversion Tool By Stephen R. Pietrowicz",,0,1
  7. DEF FN a(n) = 2*I*((S*n)+0.5)
  8. DEF FN b(n) = 0.5+(S*n)+2*(I-0.5)*(0.5-(S*n))
  9.  
  10. GOSUB Init
  11.  
  12. MouseInput:
  13.    GOSUB PrintVals
  14. '
  15. '  Wait for left mouse button to be clicked
  16. '
  17.    WHILE MOUSE(0) = 0 : WEND
  18.    x = MOUSE(3):y = MOUSE(4)
  19. '   
  20. ' Check for box boundries
  21. '    
  22.    IF (y < 100) OR (y > 180) THEN MouseInput
  23.    IF (x < 50) OR (x > 550) THEN MouseInput
  24. '
  25. ' Hue Selected 
  26. '
  27.    IF (y <= 130) THEN
  28.        IF (x >= 120) AND (x <= 480) THEN
  29.            Hue = (x - 120)
  30.            H = Hue/360
  31.            COLOR 0
  32.            LINE (hx,102)-(hx,128)
  33.            COLOR 1
  34.            LINE (x,102)-(x,128)
  35.            hx = x 
  36.        END IF
  37. '
  38. ' Saturation Selected
  39. '
  40.    ELSEIF (y >= 150) THEN
  41.        IF (x <= 150) THEN
  42.            S = (x - 50)/100 
  43.            COLOR 0
  44.            LINE (sx,152)-(sx,178)
  45.            COLOR 1
  46.            LINE (x,152)-(x,178)
  47.            sx = x 
  48. '
  49. ' Intensity Selected
  50. '
  51.        ELSEIF (x >= 450) THEN
  52.            I = (x - 450)/100 
  53.            COLOR 0
  54.            LINE (ix,152)-(ix,178)
  55.            COLOR 1
  56.            LINE (x,152)-(x,178)
  57.            ix = x 
  58.        END IF
  59.    END IF
  60.    GOSUB Convert
  61.    GOTO MouseInput
  62.    
  63. Init:
  64.    CLS
  65.    COLOR 3
  66.    LINE(118,100)-(482,130),,b
  67.    LINE(48,150)-(152,180),,b
  68.    LINE(448,150)-(552,180),,b
  69.    hx = 120: sx = 50: ix = 450
  70.    COLOR 1
  71.    LINE (hx,102)-(hx,128)
  72.    LINE (sx,152)-(sx,178)
  73.    LINE (ix,152)-(ix,178)
  74.    COLOR 2
  75.    LINE (50,25)-(550,75),,bf
  76.    COLOR 1
  77.    LINE (50,25)-(550,75),,b
  78.    r = 0: g = 0: b = 0 : S = 0 : I = 0
  79.    RETURN
  80.  
  81. '
  82. ' Change given HSI coordinates to RGB
  83. '       
  84. Convert:
  85. IF H < 0.16 THEN
  86.    Red   = 1
  87.    Green = H*6
  88.    Blue  = 0
  89. ELSEIF H < 0.33 THEN
  90.    Red   = 2 - H*6
  91.    Green = 1 
  92.    Blue  = 0
  93. ELSEIF H < 0.5 THEN
  94.    Red   = 0
  95.    Green = 1
  96.    Blue  = 6*H - 2
  97. ELSEIF H < 0.66 THEN
  98.    Red   =  0
  99.    Green = 4 - H*6
  100.    Blue  = 1
  101. ELSEIF H < 0.83 THEN
  102.    Red   = H*6 - 4
  103.    Green = 0
  104.    Blue  = 1
  105. ELSE
  106.    Red   = 1
  107.    Green = 0
  108.    Blue  = 6 - 6*H
  109. END IF
  110.  
  111. Red = Red - 0.5
  112. Green = Green - 0.5
  113. Blue = Blue - 0.5
  114.  
  115. IF (I <= 0.5) THEN
  116.     Red   = FN a(Red)
  117.     Green = FN a(Green) 
  118.     Blue  = FN a(Blue)
  119. ELSE
  120.     Red   = FN b(Red)
  121.     Green = FN b(Green)
  122.     Blue  = FN b(Blue)
  123. END IF
  124.  
  125. IF Red > 1 THEN Red = 1
  126. IF Green > 1 THEN Red = 1
  127. IF Blue > 1 THEN Red = 1
  128. IF Red < 0 THEN Red = 0
  129. IF Green < 0 THEN Green = 0
  130. IF Blue < 0 THEN Blue = 0
  131.  
  132. PALETTE 2,Red,Green,Blue
  133. RETURN
  134.  
  135. PrintVals:
  136.    COLOR 3
  137.    LOCATE 2,22
  138.    PRINT USING "Red   = #.##   ";Red;
  139.    PRINT USING "Green = #.##   ";Green;
  140.    PRINT USING "Blue  = #.##";Blue
  141.    LOCATE 12, 34    
  142.    PRINT USING "Hue = ###";Hue
  143.    LOCATE 18, 5
  144.    PRINT USING "Saturation = #.##";S
  145.    LOCATE 18, 55
  146.    PRINT USING "Intensity = #.##";I 
  147.    COLOR 2
  148. RETURN
  149.